package com.tang.service;

import com.tang.pojo.AuthInfo;
import lombok.extern.slf4j.Slf4j;

import java.time.LocalDateTime;

/**
 * 链路抽象类定义
 * <p>
 * 这部分是责任链连接起来的核心部分。重点在next获取链表的下一个数
 */
@Slf4j
public abstract class AuthLink {

    // levelUserId&levelUserName是责任链中的公用信息，标记每一个审核节点的人员信息
    protected String levelUserId; // 级别人员ID
    protected String levelUserName; // 级别人员姓名
    private AuthLink next; // 责任链

    public AuthLink(String levelUserId, String levelUserName) {
        this.levelUserId = levelUserId;
        this.levelUserName = levelUserName;
    }

    public AuthLink next() {
        return next;
    }

    public AuthLink appendNext(AuthLink next) {
        this.next = next;
        return this;
    }

    /**
     * 审核业务抽象类，每一个级别的审核都需要继承该方法写出自己的不同实现，
     * 以实现不同审核级别处理不同的业务
     *
     * @param uId      用户ID
     * @param orderId  订单ID
     * @param authDate 审核日期
     * @return 审核信息
     */
    public abstract AuthInfo doAuth(String uId, String orderId, LocalDateTime authDate);

}
